#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include<sys/types.h>


int main()
{
    int g_val = 100;
    pid_t pid = fork();

    if (pid == 0)
    {
        while(1)
        {
            printf("子:g_val:%d, &g_val:%p, pid:%d, ppid:%d\n", g_val, &g_val, getpid(), getppid());
            sleep(1);
            g_val++;
        }
    }
    else
    {
        while(1)
        {
            printf("父:g_val:%d, &g_val:%p, pid:%d, ppid:%d\n", g_val, &g_val, getpid(), getppid());
            sleep(1);
        }
    }
    return 0;
}


// int g_unval;
// int g_val = 100;

// int main(int argc, char *argv[], char *env[])
// {
//     const char *str = "helloworld";
//     printf("code addr: %p\n", main);
//     printf("init global addr: %p\n", &g_val);
//     printf("uninit global addr: %p\n", &g_unval);

//     static int test = 10;
//     char *heap_mem = (char *)malloc(10);
//     char *heap_mem1 = (char *)malloc(10);
//     char *heap_mem2 = (char *)malloc(10);
//     char *heap_mem3 = (char *)malloc(10);

//     printf("heap addr: %p\n", heap_mem); // heap_mem(0), &heap_mem(1)
//     printf("heap addr: %p\n", heap_mem1); // heap_mem(0), &heap_mem(1)
//     printf("heap addr: %p\n", heap_mem2); // heap_mem(0), &heap_mem(1)
//     printf("heap addr: %p\n", heap_mem3); // heap_mem(0), &heap_mem(1)

//     printf("test static addr: %p\n", &test); // heap_mem(0), &heap_mem(1)
//     printf("stack addr: %p\n", &heap_mem);  // heap_mem(0), &heap_mem(1)
//     printf("stack addr: %p\n", &heap_mem1);  // heap_mem(0), &heap_mem(1)
//     printf("stack addr: %p\n", &heap_mem2);  // heap_mem(0), &heap_mem(1)
//     printf("stack addr: %p\n", &heap_mem3);  // heap_mem(0), &heap_mem(1)

//     printf("read only string addr: %p\n", str);
//     for (int i = 0; i < argc; i++)
//     {
//         printf("argv[%d]: %p\n", i, argv[i]);
//     }
//     for (int i = 0; env[i]; i++)
//     {
//         printf("env[%d]: %p\n", i, env[i]);
//     }

//     return 0;
// }